﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Texfina.Core.Common;
using System.Collections;
using Texfina.Entity.Co;
using Texfina.BOQry.Co;
using Texfina.Core.Web;
using CrystalDecisions.CrystalReports.Engine;
using System.Data;
using System.IO;
using CrystalDecisions.Shared;

namespace CO
{
    public partial class WfOrdenCompraFactura : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {

                btnGrabar.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_SAVENEW;
                btnSalir.ImageUrl = Constants2.ConstMenuControlValue.BUTTON_EXIT;
                EProveedor prov = new EProveedor();
                prov.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString();

                WebHelper.LoadListControl2(dpCliprod, BProveedor.Proveedor_qry02(prov), "ds_raznombre", "id_clipro");
                mObetenerDatosPrevios();
                mCargarDatos();
            }
        }

        private void mObetenerDatosPrevios()
        {
            try
            {
                if (Session["htaOC"] != null)
                {
                    Hashtable htaDatos = new Hashtable();
                    htaDatos = (Hashtable)Session["htaOC"];
                    txtIdOrdenCompra.Text = string.IsNullOrEmpty(htaDatos["Id_ordenco"].ToString()) ? string.Empty : htaDatos["Id_ordenco"].ToString();
                    hidVentana.Value = string.IsNullOrEmpty(htaDatos["in_ventana"].ToString()) ? string.Empty : htaDatos["in_ventana"].ToString();
                }
                else
                {
                    Session["htaOC"] = null;
                    Hashtable HtaDatos = new Hashtable();
                    Session["htaOcompraNuevo"] = HtaDatos;

                    HtaDatos = (Hashtable)Session["htaOcompraNuevo"];
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }
        }

        private void mCargarDatos()
        {
            try
            {
                if (!string.IsNullOrEmpty(txtIdOrdenCompra.Text))
                {
                    EOrdenCompra oCompra = new EOrdenCompra();

                    oCompra.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); //llenar con sesion
                    oCompra.Id_ordenco = string.IsNullOrEmpty(txtIdOrdenCompra.Text) ? string.Empty : Convert.ToString(txtIdOrdenCompra.Text);
                    oCompra.idEmpresa = Session[ConstSessionVar.EMPRESA].ToString();
                    //----------------------------------------------------------------

                    EOrdenCompraFactura oCompraF = new EOrdenCompraFactura();

                    oCompraF.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); //llenar con sesion
                    oCompraF.Id_ordenco = string.IsNullOrEmpty(txtIdOrdenCompra.Text) ? string.Empty : Convert.ToString(txtIdOrdenCompra.Text);
                    oCompraF.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString();
                    //----------------------------------------------------------------
                    EOrdenCompra oBtieneOC = new EOrdenCompra();
                    oBtieneOC = BOrdenCompra.mObtenerOC_(oCompra);
                    txtIdOrdenCompra.Text = oBtieneOC.Id_ordenco.ToString().Trim();
                    txtfechaOC.Text = oBtieneOC.Fe_ordenco.ToString().Trim();
                    txtTotalOC.Text = oBtieneOC.Mt_total.ToString().Trim();
                    txtObserv.Text = oBtieneOC.Ds_observa.ToString().Trim();
                    dpCliprod.SelectedValue = oBtieneOC.Id_clipro.ToString().Trim();

                    List<EOrdenCompraFactura> lstoc = new List<EOrdenCompraFactura>();

                    lstoc = BOrdenCompraFactura.mListarOcompraFactura(oCompraF);

                    Session["seslstListaDetOC_"] = lstoc;

                    gvList.DataSource = lstoc;

                    gvList.DataBind();


                    //for (int r = 0; gvList.Rows.Count > r; r++)
                    //{
                    //    var chk = ((CheckBox)gvList.Rows[r].FindControl("chkBxIGV")) as CheckBox;

                    //    var igv = (TextBox)gvList.Rows[r].FindControl("txtIGV");

                    //    if (igv.Text == "0")
                    //    {
                    //        chk.Checked = false;

                    //    }
                    //    else
                    //    {
                    //        chk.Checked = true;
                    //    }
                    //}

                }

            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        protected void btnSalir_Click(object sender, ImageClickEventArgs e)
        {
            this.Response.Redirect("wfOrdenCompraBnd.aspx");
        }

        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //llena la columna de la grila tipo dropdownlist con los tipos de horario.

                DropDownList cbGrillaTipDoc = (DropDownList)e.Row.FindControl("dpTipoDoc");
                WebHelper.LoadListControl2(cbGrillaTipDoc, BDocumento.GetDocumento_Qry01(), "ds_docucom", "id_docucom");

                cbGrillaTipDoc.Items.Insert(0, new ListItem("Seleccione", "0"));


                cbGrillaTipDoc.SelectedValue = (String)DataBinder.Eval(e.Row.DataItem, "Id_docucom").ToString();



            }
        }

        protected void btnNew_Click(object sender, EventArgs e)
        {
            try
            {
                // crea la entidad tipo lista 
                //List<AsignacionHorarioEnt> lstAsigHorario = new List<AsignacionHorarioEnt>();
                // crea la entidad para obtener los campos que deseamos esten en blanco

                //AsignacionHorarioEnt asigHorario = new AsignacionHorarioEnt();

                List<EOrdenCompraFactura> lstProd = new List<EOrdenCompraFactura>();

                EOrdenCompraFactura oFac = new EOrdenCompraFactura();

                // llega a ingresar siempre en cuando ya se tenga un registro en la grilla
                string str = Convert.ToString(gvList.Rows.Count + 1);
                if (gvList.Rows.Count > 0)
                {
                    //almacena en la entidad la informacion ingresada en la grilla
                    //salva los datos, hace que cuando se de agregar no se pierda la informacion ya ingresada

                    mSalvarDatosGrilla();

                    lstProd = (List<EOrdenCompraFactura>)(Session["SeslstSalvaDatos_"]);

                    //lstAsigHorario = (List<AsignacionHorarioEnt>)(Session["SeslstSalvaDatos"]);
                    //añade un registro mas en blaco

                    oFac.Nu_secuen = str.PadLeft(3, '0');
                    oFac.Id_docucom = "";

                    oFac.Nu_docum = "";
                    oFac.Fe_docum = "";
                    oFac.Mt_docum = Convert.ToDecimal("0.000");

                    // muestra el item en blanco

                    lstProd.Add(oFac);
                    gvList.DataSource = lstProd;
                    gvList.DataBind();
                    Session["lstListadoGrilla_"] = lstProd;

                }
                else
                {
                    // Añande el primer item en blando de la grilla
                    oFac.Nu_secuen = str.PadLeft(3, '0');
                    oFac.Id_docucom = "";
                    oFac.Nu_docum = "";
                    oFac.Fe_docum = "";
                    oFac.Mt_docum = Convert.ToDecimal("0.000");


                    lstProd.Add(oFac);
                    //Muestra la grilla con un fila en blanco 
                    gvList.DataSource = lstProd;
                    gvList.DataBind();
                    Session["lstListadoGrilla_"] = lstProd;
                    //mCalculaTotal();
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }
        }

        private void mSalvarDatosGrilla()
        {
            try
            {
                //recorre la cantidad de items, por cada item la entidad oAsigHorario va almacenando , 
                //esto para que data que se va ingresando en la grilla no se pierda

                List<EOrdenCompraFactura> lstSalvarDatos = new List<EOrdenCompraFactura>();

                for (int i = 0; gvList.Rows.Count > i; i++)
                {
                    // la entidad almacena los items de la grilla 

                    EOrdenCompraFactura oDetOCF = new EOrdenCompraFactura();

                    // verificar si los valores ingresados en la grilla estan en label o texbox como tambien en un dropdowlinst
                    oDetOCF.Nu_secuen = string.IsNullOrEmpty(((TextBox)gvList.Rows[i].FindControl("txtItem")).Text) ? string.Empty : Convert.ToString(((TextBox)gvList.Rows[i].FindControl("txtItem")).Text);
                    oDetOCF.Id_docucom = string.IsNullOrEmpty(((DropDownList)gvList.Rows[i].FindControl("dpTipoDoc")).SelectedValue) ? string.Empty : Convert.ToString(((DropDownList)gvList.Rows[i].FindControl("dpTipoDoc")).SelectedValue);
                    oDetOCF.Nu_docum = string.IsNullOrEmpty(((TextBox)gvList.Rows[i].FindControl("txtDocumento")).Text) ? string.Empty : Convert.ToString(((TextBox)gvList.Rows[i].FindControl("txtDocumento")).Text);
                    oDetOCF.Fe_docum = string.IsNullOrEmpty(((TextBox)gvList.Rows[i].FindControl("txtFecDocumento")).Text) ? string.Empty : Convert.ToString(((TextBox)gvList.Rows[i].FindControl("txtFecDocumento")).Text);
                    oDetOCF.Mt_docum = string.IsNullOrEmpty(((TextBox)gvList.Rows[i].FindControl("txtTotal")).Text) ? 0 : Convert.ToDecimal(((TextBox)gvList.Rows[i].FindControl("txtTotal")).Text);

                    //añade los valores de la entidad a la lista de la entidad
                    lstSalvarDatos.Add(oDetOCF);
                }
                // se crea una sesion para almacenar la lista que contiene los  datos.

                Session["SeslstSalvaDatos_"] = lstSalvarDatos;
            }

            catch (Exception ex)
            {

                ex.ToString();
            }
        }

        protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
        {
            EOrdenCompraFactura ocf = new EOrdenCompraFactura();

            //------------------------Detalle de compra Factura----------------------------------------------------    

            for (int i = 0; gvList.Rows.Count > i; i++)
            {
                //prodxUnd.Id_producto = txtidProducto.Text;

                var lblItem = ((TextBox)gvList.Rows[i].FindControl("txtItem")).Text.Trim();
                var LbltipDoc = ((DropDownList)gvList.Rows[i].FindControl("dpTipoDoc")).SelectedValue;
                var LblDocumento = ((TextBox)gvList.Rows[i].FindControl("txtDocumento")).Text.Trim();
                var LblfeDocumento = ((TextBox)gvList.Rows[i].FindControl("txtFecDocumento")).Text.Trim();
                var LblTotal = ((TextBox)gvList.Rows[i].FindControl("txtTotal")).Text.Trim();

                ocf.Id_periodo = Session[ConstSessionVar.PERIODO].ToString();//llenar con sesion
                ocf.Id_ordenco = txtIdOrdenCompra.Text;

                ocf.Nu_secuen = lblItem.ToString();
                ocf.Id_docucom = LbltipDoc.ToString();
                ocf.Nu_docum = LblDocumento.ToString();
                ocf.Mt_docum = Convert.ToDecimal(LblTotal);

                ocf.Fe_docum = LblfeDocumento.ToString();

                ocf.Id_ucrearec = Session[ConstSessionVar.IDLOGON].ToString();//LLENAR DESDE LA SESION
                ocf.Id_uupdarec = Session[ConstSessionVar.IDLOGON].ToString();//LLENAR DESDE LA SESION
                ocf.St_anulado = "0";
                ocf.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString(); //LLENAR DESDE LA SESION
                BOrdenCompraFactura.OrderCompraFact_mnt01(ocf);

            }
            lblMensaje.Text = "Datos grabados";

        }

        protected void gvList_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            PageBase ri = new PageBase();
            ri.EditRowIndex = Convert.ToInt32(e.CommandArgument);

            switch (e.CommandName)
            {

                case Constants2.ConstGridRowCommand.GRIDDELETE:
                    for (int i = 0; gvList.Rows.Count > i; i++)
                    {
                        var chk = ((CheckBox)gvList.Rows[i].FindControl("chkBxSelect")) as CheckBox;
                        if (chk.Checked)
                        {
                            // almacena en variables los items que va recorriendo

                            var LblNum_Secuen = ((TextBox)gvList.Rows[i].FindControl("txtItem")).Text.Trim();

                            //lblIdProducto = hddCodigo.Value;

                            EOrdenCompraFactura doc = new EOrdenCompraFactura();
                            doc.Id_empresa = Session[ConstSessionVar.EMPRESA].ToString(); //llenar con sesion
                            doc.Id_periodo = Session[ConstSessionVar.PERIODO].ToString(); // llenar con sesion
                            doc.Id_ordenco = txtIdOrdenCompra.Text;
                            doc.Nu_secuen = LblNum_Secuen;
                            doc.Id_uupdarec = Session[ConstSessionVar.IDLOGON].ToString(); //llenar con sesion
                            BOrdenCompraFactura.OrderCompraFact_mnt02(doc);
                        }
                    }
                    gvList.DeleteRow(Convert.ToInt32(e.CommandArgument));
                    gvList.DataBind();
                    break;
            }
       }

        protected void gvList_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                mSalvarDatosGrilla();
                int intFila = e.RowIndex;
                List<EOrdenCompraFactura> lsListadoActual = (List<EOrdenCompraFactura>)Session["SeslstSalvaDatos_"];
                lsListadoActual.RemoveAt(intFila);
                Session["SeslstSalvaDatos_"] = lsListadoActual;
                gvList.DataSource = lsListadoActual;
                gvList.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
                //lblMensaje.Text = ex.Message.ToString();
                //lblDCPDMensaje.Visible = true;
            }
        }

        public override object GetDataReport(string key)
        {

            EParOCFillrpt objE = new EParOCFillrpt();
      

            objE.IdAnio = Session[ConstSessionVar.PERIODO].ToString();
            objE.IdOrdenCompra = txtIdOrdenCompra.Text;
            objE.IdEmpresa = Session[ConstSessionVar.EMPRESA].ToString();// llenar con sesion


            BOrdenCompra objOC = new BOrdenCompra();
            DataTable dt = objOC.OrderCompra_rpt02(objE);
            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            return ds;

        }

        public override void PrintReport(string key)
        {
            ReportDocument objRpt = new ReportDocument();
            DataSet ds = (DataSet)this.GetDataReport(key);
            objRpt.Load(this.MapPath(Constants2.ConstSistema.ROOT_FOLDER_PATH + "/co_ordenCompra_rpt.rpt"));
            objRpt.SetDataSource(ds.Tables[0]);
            MemoryStream ms = new MemoryStream();
            Response.Clear();
            ms = (MemoryStream)objRpt.ExportToStream(ExportFormatType.PortableDocFormat);
            objRpt.Dispose();
            objRpt = null;
            Response.AddHeader("Content-Disposition", "attachment;filename=OrdenCompra.pdf");
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            ms.WriteTo(Response.OutputStream);
            Response.Flush();
            Response.End();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            PrintReport("");
        }
    }
}